package com.lyx.server.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.lyx.common.param.CouponAdd;
import com.lyx.common.param.CouponAudit;
import com.lyx.common.vo.R;
import com.lyx.server.dao.CouponDao;
import com.lyx.server.entity.Coupon;
import com.lyx.server.service.CouponService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.Date;

/**
 * 优惠券表(Coupon)表服务实现类
 *
 * @author McMeloxD
 * @since 2024-08-14 18:12:46
 */
@Service("couponService")
public class CouponServiceImpl  implements CouponService {

    @Resource
    private CouponDao dao;

    @Override
    public R save(CouponAdd add) {
        //1.校验
        if(add==null){
            return R.fail("亲，请检查参数");
        }
        //2.新增 组装对象
        Coupon coupon=new Coupon();
        BeanUtils.copyProperties(add,coupon);
        coupon.setTakenum(0);
        coupon.setStatus("未审核");
        coupon.setCreateTime(new Date());
        coupon.setUpdateTime(new Date());
        if(dao.insert(coupon)<=0){
            return R.fail("亲，新增优惠券失败！");
        }
        return R.ok("");
    }

    @Override
    public R audit(CouponAudit audit) {
        //1.校验
        if(audit==null){
            return R.fail("亲，请检查参数");
        }
        //2.修改
        Coupon coupon=new Coupon();
        coupon.setId(audit.getId());
        coupon.setStatus(audit.getStatus());
        coupon.setUpdateTime(new Date());
        if(dao.updateById(coupon)<=0){
            return R.fail("亲，审核优惠券操作失败");
        }
        //3.针对 需要用户领取的优惠券 审核通过之后，可以考虑使用缓存
        //什么样的数据适合缓存：高频查询，低频修改
        //缓存 可以领取的优惠券 使用Redis  使用Hash类型  field 优惠券id value 优惠券对象
//        if(audit.getStatus().equals("审核通过")){
//            //再考虑缓存,只缓存 可以主动领取的才需要缓存
//
//        }

        return R.ok("");
    }

    @Override
    public R queryWhere(String status) {
        //1.创建查询条件对象
        LambdaQueryWrapper<Coupon> wrapper=new LambdaQueryWrapper<>();
        wrapper.orderByDesc(Coupon::getEndDate);
        if(StringUtils.hasLength(status)){
            if(!status.equals("全部")){
                wrapper.eq(Coupon::getStatus,status);
            }
        }

        return R.ok(dao.selectList(wrapper));
    }

}

